# RISC-V最小操作系统启动汇编代码
# 参考xv6的启动机制，但大幅简化

.section .text
.global _start

_start:
    # 设置栈指针 - 栈放在内存高地址，向下增长
    # QEMU virt平台内存从0x80000000开始
    la sp, stack_top
    
    # 调试标记：输出字符'S'表示启动成功
    li t0, 0x10000000     # UART基地址
    li t1, 'S'
    sb t1, 0(t0)
    
    # 对于最小系统，可以省略BSS清零
    # 因为我们没有使用未初始化的全局变量
    # 调试标记：输出字符'B'表示跳过BSS清零
    li t0, 0x10000000
    li t1, 'B'
    sb t1, 0(t0)
    
    # 跳转到C主函数
    call main
    
    # 如果main函数返回，进入死循环
    j .

# 栈空间定义 - 4KB栈大小
.section .bss
.align 4
stack_bottom:
    .space 4096
stack_top: